<?php

class Model_Community extends RL_Model2
{
	private $default_skin; // дефолтная шкура на узле

	// дефолтные настройки сообщества
	public $default_config = array(
		"join_mode"=>"free",
		"widgets"=>array( // виджеты с параметрами и названиями
			"1"=>array( // параметры виджета
				"name"=>"StatsWidget",
				"params"=>array(),
			),
			"2"=>array(
				"name"=>"GalleryWidget",
				"params"=>array("tdi_oid"=>23,),
			),
			"3"=>array(
				"name"=>"LastCommentedItemsWidget",
				"params"=>array(),
			),
			"4"=>array(
				"name"=>"FilesWidget",
				"params"=>array("tdi_oid"=>23,),
			),
			"5"=>array(
				"name"=>"TagsWidget",
				"params"=>array(),
			),
			"6"=>array(
				"name"=>"LastDocsWidget",
				"params"=>array("tdi_oid"=>31),
			),
			/*
			"7"=>array(
				"params"=>array(
						'title' => 'Популярные записи',
					),
				"name"=>"PopularItemsWidget",
				),
			 */
			"8"=>array(
				"name"=>"UserListWidget",
				"params"=>array(),
			),
			"9"=>array(
				"name"=>"AnnounceItemWidget",
				"params"=>array(
					"header"=>"Ваши тапки стали наши",
					"body"=>"Много текста про тем текущего дня",
					"item_oid"=>25,
				),
			),

		),
		"widgets_layout"=>array( // расположение виджетов дефолтное
			"0"=>array( 1, 2, 4 ), // первая колонка
			"1"=>array( 6, 3 ), // вторая
			"2"=>array( 5, 8, 7 ) // третья
		)
	);

	public function getCommunity ($oid)
	{
		return $this->store->getObject($oid);
	}

	public function createCommunity($info, $community_config, $upload) {
		$info['date'] = gmdate('YMd');
		if (!isset($info['mod'])) $info['mod'] = 'Beware of drunken people!';
		$info['config'] = serialize($community_config);

		$comm = $this->store->create('fcommunity', $info);
		$comm->save();

		// --- картинки --- {{{
		$this->_updatePictures($comm, $info, $upload);
		// --- картинки --- }}}

		$comm->inSense("community");
		$comm->save();
		return $comm;

	}

	public function setDefaultSkin($skin_name) {
		$this->default_skin = $skin_name;
	}

	public function getDefaultSkin($skin_name) {
		return $this->default_skin;
	}

	public function getSkin( fobject $community) {
		// посмотреть в объекте сообщетсва инфу о скине
		// $data['skin']
		$community_skin = isset($community->data['skin'])
			// берем из сообщества
			? $community->data['skin']
			// или дефолтный из ШД
			: $this->default_skin;

		//$community_skin = "platonica"; // фиксирование темы для отладки
		return $community_skin;
	}

	public function changeCommunity( fobject $community, $info, $upload, $delete_image = array() )	{
		if (empty($community)) { /* community not found */ return false; }

		foreach ($info as $k=>$v) {
			$community->data[$k] = $v;
		}

		if ( !empty($delete_image) ) {
			$image_store = new ImageStorage( $this->store );
			
			foreach ($delete_image as $key=>$image_oid) {
				$image_store->Del($image_oid);
				
				if ( isset($community->data['logo_image_oid'])
				&& $community->data['logo_image_oid'] == $image_oid ) {
					unset($community->data['logo_image_oid']);
				}
				if ( isset($community->data['background_image_oid'])
				&& $community->data['background_image_oid'] == $image_oid ) {
					unset($community->data['background_image_oid']);
				}
			}
		}

		// --- картинки --- {{{
		$this->_updatePictures($community, $info, $upload);
		// --- картинки --- }}}

		$community->save();
		$community->updateSense("community");

		return $community;
	}

	/**
	 * Получить конфиг сообщества
	 *
	 * @param $community_oid
	 * @return array
	 * @author Alexander Sibiryakov
	 **/
	public function getConfig($community_oid) {
		$com = $this->getCommunity($community_oid);
		$config = unserialize($com->data['config']);
		return $config;
	}

	public function saveConfig($community_oid, $config) {
		$com = $this->getCommunity($community_oid);

		$com->data['config'] = serialize($config);
		$com->save();
		$com->updateSense('community');
	}

	public function setDefaultConfig($oid) {
		$community_config = $this->getConfig($oid);

		// сохраняем
		$this->model->saveConfig($oid, $this->default_config);

	}


	// --- картинки --- {{{
	private function _updatePictures ($community, $info, $upload) {
		// сохраним новые картинки
		// удалим старые
		// запишем oid'ы новых картинок в $community->data
		//
		// имена полей формы (они же -- объекта) с картинками
		$image_fields = array(
			'logo_image' => array(
				'thumbs' => array(
					'sm1' => array(
						'filter' => 'scale',
						'w' => 220,
						'h' => 80,
					),
				),
			),
			'background_image' => array(
				'thumbs' => array(
					'sm1' => array(
						'filter' => 'scale',
						'max_w' => 220,
						'max_h' => 100,
					),
					'sm2' => array(
						'filter' => 'scale',
						'w' => NULL,
						'max_h' => 100,
					),
				),
			),
		);
		$data =& $community->data;
		//$upload
		// >
		$image_store = new ImageStorage( $this->store );

		foreach ($image_fields as $field_name => $field_info) { // для каждого поля формы с картинкой

			if (isset($upload['_'.$field_name]) && $upload['_'.$field_name]['tmp_name']) { // если не пустое
                                                                             // значит постят новый файл
				// сохраним новую картинку
				$thumbs = array_merge($image_store->thumbs, $field_info['thumbs']);
				$image_oid = $image_store->Put( $upload['_'.$field_name]['tmp_name'], $thumbs );
				// имя поля данных
				$data_field_name = $field_name . '_oid';

				if (isset($data[$data_field_name])) { // в инфе уже была какая-то картика -- херим старую
					$image_store->del($data[$data_field_name]);
				}

				$data[$data_field_name] = $image_oid;
				unset($image_oid);
			}

		}
		unset($image_store);
	} // end of method _updatePictures
	// --- картинки --- }}}

}
